package leetcode.easy;

/**
 * 给出一个 32 位的有符号整数，你需要将这个整数中每位上的数字进行反转。
 * 注意：
 * 假设我们的环境只能存储得下 32 位的有符号整数，则其数值范围为[−2^31, 2^31− 1]。请根据这个假设，如果反转后整数溢出那么就返回 0。
 * 示例 1：
 * 输入：x = 123
 * 输出：321
 * 示例 2：
 * 输入：x = -123
 * 输出：-321
 * 示例 3：
 * 输入：x = 120
 * 输出：21
 * 示例 4：
 * 输入：x = 0
 * 输出：0
 *
 * @author TANGYE
 * @2021/1/19 18:14
 */
public class IntReverse {

    public static void main(String[] args) {
        System.out.println(reverse(1234567899));
    }

    public static int reverse(int x) {
        int num = x;
        int oneNum;
        int result = 0;
        boolean fu = false;
        if (num < 0) {
            num = num * -1;
            fu = true;
        }
        while (num > 0) {
            try {
                oneNum = num % 10;
                num = num / 10;
                if (result > Integer.MAX_VALUE / 10) {
                    return 0;
                }
                // 以下代码是完善后的： 但是通常记不住
                // (result > Integer.MAX_VALUE/10 || (result == Integer.MAX_VALUE / 10 && oneNum > 7)) return 0;
                //if (result < Integer.MIN_VALUE/10 || (result == Integer.MIN_VALUE / 10 && oneNum < -8)) return 0;

                result = result * 10 + oneNum;
            } catch (Exception e) {
                e.printStackTrace();
                return 0;
            }
        }
        return fu ? -1 * result : result;
    }
}
